/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.smarttmt.suite.web.beans;

/**
 *
 * @author Nicolás Rubén Caballero Ortega (ingeniero.desarrollo004@smarttmt.com
 * - helaman58@gmail.com)
 */
abstract class SmartSuiteBackingBean {

    //Para ejecutar los métodos preload de los bean que son Preloadable
    public void executePreload(String navigationRule, java.util.Map<String, Object> parameters) throws Exception{
        try {
            com.smarttmt.suite.web.interfaces.Preloadable bean = (com.smarttmt.suite.web.interfaces.Preloadable) com.smarttmt.suite.web.utilities.FacesUtils.getManagedBean(navigationRule);
            bean.preload(parameters);
        } catch (Exception e) {
            showError(e.getMessage(), "");
        }
    }

    //Para mensajes de Error
    public void showError(String msg, String det) {
        javax.faces.context.FacesContext.getCurrentInstance().addMessage(null, new javax.faces.application.FacesMessage(javax.faces.application.FacesMessage.SEVERITY_ERROR, msg, det));
    }

    //Para mensajes informativos
    public void showMessage(String msg, String det) {
        javax.faces.context.FacesContext.getCurrentInstance().addMessage(null, new javax.faces.application.FacesMessage(javax.faces.application.FacesMessage.SEVERITY_INFO, msg, det));
    }

    //Clase para validar la sesión del usuario que esta ingresando a un proceso
    public boolean validateUser(String username) throws java.lang.Exception {
        //TODO se debe implementar la opción.
        //Se haria validando la existencia del usuario que se encuentra en el UserloginBean
        //y revisando las diversas condiciones que lo acreditan como un usuario activo.
        return true;
    }

    //Clase para validar las operaciones a las que intentará acceder el usuario
    public boolean validateUserOperation(String username, String operation) throws java.lang.Exception {
        //TODO se debe implementar la opción.
        //Se haria validando la existencia de la operación relacionada entre las parametrizadas
        //para el usuario. En caso de no tenerla, debe generar una excepción que no le permita
        //ejecutar opción alguna. Esto con la finalidad de manejar una seguridad en la navegación
        //como si fueran transacciones.
        return true;
    }
    
    public String goToOption(String operation){
        return operation;
    }

    //Método que retorna la url al desktop de operaciones del cliente/usuario
    public String goToOperations() {
        return com.smarttmt.suite.web.domain.Constants.CUSTOMEROPERATIONS;
    }

    //En caso de volver a consultarse el menú del usuario, es necesario proporcionar
    //esta información. No se debe sacar del UserLogin, porque puede que ocura que por
    //fallas relacionados con el scoped llegue nulo.
    public String goToOperations(String username) throws Exception {
        try {
            java.util.Map<String, Object> parameters = new java.util.HashMap<>();
            parameters.put("username", username);
            executePreload(com.smarttmt.suite.web.domain.Constants.CUSTOMEROPERATIONS, parameters);
            
            return com.smarttmt.suite.web.domain.Constants.CUSTOMEROPERATIONS;
        } catch (Exception e) {
            
            return null;
        }
    }

    //Método utilizado para ir al index de la aplicación.
    public String goToIndex() {
        return com.smarttmt.suite.web.domain.Constants.INDEX;
    }
}
